這幾篇我們從一維陣列的基本操作(Running Sum、Concatenation)練起,現在要把焦點放到"字元陣列"(字串)。
今天題目是經典的「反轉字串(Reverse String)」,重點在於如何在C裡操作char[]、如何就地(in-place)修改字串,以及雙指標技巧的運用,這些在未來處理字串與buffer操作會非常常用。
📖 題目說明
給一個字元陣列 s 與長度 sSize,請就地反轉陣列(也就是把字元順序顛倒),不需要回傳東西。
範例:
輸入: s = ['h','e','l','l','o'], sSize = 5
處理後 s = ['o','l','l','e','h']
🔑 解題要點
1.C裡的字串就是char陣列,沒有內建的「可變字串」物件,操作時要直接處理陣列索引。
2.就地反轉(in-place)意味著不申請新陣列,而是在原陣列上互換元素(節省記憶體)。
3.常用技巧是"雙指標"(two pointers):一個指向開頭,一個指向結尾,逐步交換直到相遇。
4.注意:sSize是字元數(不是C的\0字串長度問題),LeetCode提供的通常直接給陣列與大小。
🧠 心得
此題我學到函式傳入參數時可以把陣列寫成int*來接收,實際上就是用指標代表整個陣列;在回傳答案時,需要透過returnSize這種指標參數把長度帶回去,這讓我更清楚C語言在沒有物件或陣列型態可以直接回傳時,都是用指標來處理的設計方式。另外,建立新陣列時直接用大括號初始化{0}可以一次清空,這對於理解C語言操作陣列的基本功很有幫助。我覺得這題讓我把「指標」、「陣列」、「函式回傳值」這些基礎觀念串起來,開始能夠理解為什麼C常常需要透過指標來溝通不同函式之間的資料。